Показано с 1 по 3 из 3

Тема: [MV + MZ]DKR_ForcedSaveLoad

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию [MV + MZ]DKR_ForcedSaveLoad

    Название плагина: DKR_ForcedSaveLoad

    Автор: DarchanKaen

    Версия: 2.0 (MV) и 2.0 (MZ)

    Дата выхода:
    02.10.2021 - версия 2.0 для MZ
    16.09.2021 - версия 2.0 (только MV)
    16.05.2021 - версия 1.0 (MV и MZ)

    Описание плагина:
    Плагин позволяет сохранять/загружать игру в/из файл(а) сохранения без открытия экрана сохранения/загрузки. Аналог автосохранения.
    В версии 2.0 также можно блокировать / разблокировать слот сохранения для ручной записи в слот.

    Параметры плагина:
    Номер переменной для хранения Списка доступности слотов сохранения; по-умолчанию используетсяся переменная №7.
    Можно поменять, но не затирайте данную переменную во время игры!

    Использование плагина:

    Одинаково для MV и для MZ!

    В эвенте, команде "Скрипт", написать одну из следующих команд:

    DKR.ForcedSaveLoad.onOffManualSaveSlot(isSaveFileE nabled, saveFileIndex);
    DKR.ForcedSaveLoad.forcedSave(saveFileIndex);
    DKR.ForcedSaveLoad.forcedLoad(saveFileIndex);

    где:
    isSaveFileEnabled - true (можно сохранять в слот вручную) или false (слот закрыт для ручного сохранения).
    saveFileIndex - номер файла сохранения, который больше 0;

    В случае указания неверного номера файла сохранения в игре ничего не происходит: ошибка Игроку не отображается, но сохранение/загрузка также не происходит; при этом в консоль разработчика отображается сообщение об ошибке вида:
    'DKR.ForcedSaveLoad_SAVE: save file index can\'t be below one!'

    Спойлер Код плагина для MV, версия 2.0:

    Код:
    //-----------------------------------------------------------------------------
    //  DKR ForcedSaveLoad 2.0
    //-----------------------------------------------------------------------------
    //  For: RPGMAKER MV
    //  DKR_ForcedSaveLoad_2_MV.js
    //-----------------------------------------------------------------------------
    //  16.09.2021 - Версия 2.0.0
    //-----------------------------------------------------------------------------
    // Поставляется AS-IS.
    // Вся ответственность при использовании - на Пользователе!
    //-----------------------------------------------------------------------------
    
    var Imported = Imported || {};
    Imported.DKR_ForcedSaveLoad = true;
    
    var DKR = DKR || {};          
    DKR.ForcedSaveLoad = DKR.ForcedSaveLoad  || {}; 
    
    //-----------------------------------------------------------------------------
    /*:
     * @plugindesc (v.2.0.0) Плагин позволяет сохранять/загружать игру в/из файл(а) сохранения без открытия экрана сохранения/загрузки. Аналог автосохранения.
     * 
     * @target MV
     * @author DarchanKaen
     *
     * @help
     *   DKR ForcedSaveLoad
     * ----------------------------------------------------------------------------
     * ---Общая информация:
     * Плагин позволяет сохранять/загружать игру в/из файл(а) сохранения без  
     * открытия экрана сохранения/загрузки. Аналог автосохранения.
     *
     * Также плагин позволяет закрыть / открыть возможность ручного сохранения в 
     * указанный слот сохранения (например, сделать слот автосохранения недоступным
     * для записи, как в MZ).
     *
     * Номер файла сохранения не должен больше нуля; по-умолчанию номер файла сохранения равняется 1.
     * 
     * Для корректной работы доступности слотов сохранения используется переменная, хранящая список
     * и по-умолчанию исп-ся переменная №7 - не затирайте ее!
     *
     * ---Команды(в эвенте команда "Скрипт"):
     * DKR.ForcedSaveLoad.onOffManualSaveSlot(isSaveFileEnabled, saveFileIndex) - вкл/выкл возможность ручного сохр-я в слот.
     * DKR.ForcedSaveLoad.forcedSave(saveFileIndex) - принудительное сохранение в указанный слот.
     * DKR.ForcedSaveLoad.forcedLoad(saveFileIndex) - принудительная загрузка из указанного слота.
     * где 
     * isSaveFileEnabled - true (можно сохранять в слот вручную) или false (слот закрыт для ручного сохранения).
     * saveFileIndex - номер слота сохранения для сохранения / загрузки (д.б. больше 0!).
     * ----------------------------------------------------------------------------
     *
     * @param saveSlotsStatusesListVarId
     * @type variable
     * @desc Номер переменной для сохранения Списка доступности слотов сохранения
     * @default 7
     *
     */
    
    (function() { 
    
    
    
    //----DATA
    DKR.ForcedSaveLoad.parameters = PluginManager.parameters('DKR_ForcedSaveLoad_2_MV');
    let saveSlotsStatusesListVarId = Number(DKR.ForcedSaveLoad.parameters["saveSlotsStatusesListVarId"]) || 7;
    
    
    
    //----LOGIC
    const isSavefileEnabled = function(savefileId){
    	let saveSlotsStatusesList = $gameVariables.value(saveSlotsStatusesListVarId) || [];
    	
    	let isSavefileEnabled = false;
    	
    	const saveSlotStatus = saveSlotsStatusesList[savefileId];
    	if(undefined === saveSlotStatus || true === saveSlotStatus.slotEnabled){
    		isSavefileEnabled = true;
    	}else{
    		isSavefileEnabled = false;
    	}
    	
    	return isSavefileEnabled;
    }
    
    
    const enableOrDisableSaveSlot = function(isSaveFileEnabled, savefileId){
    	let saveSlotsStatusesList = $gameVariables.value(saveSlotsStatusesListVarId) || [];
    	
    	const saveSlotStatus = {slotId: savefileId, slotEnabled: isSaveFileEnabled};
    	saveSlotsStatusesList[savefileId] = saveSlotStatus;
    	
    	$gameVariables.setValue(saveSlotsStatusesListVarId, saveSlotsStatusesList);
    }
    
    
    const saveForeced = function(saveFileIndex = 1){
    	if(saveFileIndex < 1){
    		console.log('DKR.ForcedSaveLoad_SAVE: save file index can\'t be below one!');
    		return false
    	}
    	console.log('DKR.ForcedSaveLoad: force save in file #' + saveFileIndex + '...');
    	$gameSystem.onBeforeSave();
    	DataManager.saveGame(saveFileIndex);
    }
    
    
    const loadForced = function(loadFileIndex = 1){
    	if(loadFileIndex < 1){
    		console.log('DKR.ForcedSaveLoad_LOAD: save file index can\'t be below one!');
    		return false
    	}
    	if(false === StorageManager.exists(loadFileIndex)){
    		console.log('DKR.ForcedSaveLoad_LOAD: saveFile ' + loadFileIndex + ' not exist!');
    		return false
    	}
    	if(true === DataManager.isAnySavefileExists()){
    		console.log('DKR.ForcedSaveLoad: force load save file #' + loadFileIndex + '...');
    		if (DataManager.loadGame(loadFileIndex)) {
    			$gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
    			$gamePlayer.requestMapReload();
    			SceneManager.goto(Scene_Map);
    		}
    	}
    }
    
    
    
    //----MODIFY CORE-LIB
    //--save process
    Scene_Save.prototype.onSavefileOk = function() {
        Scene_File.prototype.onSavefileOk.call(this);
    	
    	let savefileId =  this.savefileId();
    	
    	if( true === isSavefileEnabled(savefileId) ){
    		$gameSystem.onBeforeSave();
    		if (DataManager.saveGame(this.savefileId())) {
    			this.onSaveSuccess();
    			
    			let saveSlotsStatusesList = $gameVariables.value(saveSlotsStatusesListVarId) || [];
    			saveSlotsStatusesList.push( {slotId: savefileId, slotEnabled: true} );
    			$gameVariables.setValue(saveSlotsStatusesListVarId, saveSlotsStatusesList);
    			
    			//saveSlotsStatusesList.push( {slotId: savefileId, slotEnabled: true} );
    		} else {
    			this.onSaveFailure();
    		}
    	} else {
    		this.onSaveFailure();
    	}
        
    };
    
    
    //--save GUI
    Window_SavefileList.prototype.drawItem = function(index) {
        var id = index + 1;
        var valid = DataManager.isThisGameFile(id);
    	
    	valid = isSavefileEnabled(id);
    	
        var info = DataManager.loadSavefileInfo(id);
        var rect = this.itemRectForText(index);
        this.resetTextColor();
        if (this._mode === 'load') {
            this.changePaintOpacity(valid);
        }
        this.drawFileId(id, rect.x, rect.y);
        if (info) {
            this.changePaintOpacity(valid);
            this.drawContents(info, rect, valid);
            this.changePaintOpacity(true);
        }
    };
    
    
    
    //----COMMANDS
    DKR.ForcedSaveLoad.onOffManualSaveSlot = function(isSaveFileEnabled, saveFileIndex){	
    	enableOrDisableSaveSlot(isSaveFileEnabled, saveFileIndex);
    }
    
    DKR.ForcedSaveLoad.forcedSave = function(saveFileIndex){
    	saveForeced(saveFileIndex);
    }
    
    DKR.ForcedSaveLoad.forcedLoad = function(loadFileIndex){
    	loadForced(loadFileIndex);
    }
    
    
    	
    })();


    Спойлер Код плагина для MZ, версия 2.0:

    Код:
    //-----------------------------------------------------------------------------
    //  DKR ForcedSaveLoad
    //-----------------------------------------------------------------------------
    //  For: RPGMAKER MZ
    //  DKR_ForcedSaveLoad_MZ.js
    //-----------------------------------------------------------------------------
    //  02.10.2021 - Версия 2.0.0
    //-----------------------------------------------------------------------------
    // Поставляется AS-IS.
    // Вся ответственность при использовании - на Пользователе!
    //-----------------------------------------------------------------------------
    
    var Imported = Imported || {};
    Imported.DKR_ForcedSaveLoad = true;
    
    var DKR = DKR || {};          
    DKR.ForcedSaveLoad = DKR.ForcedSaveLoad  || {}; 
    
    //-----------------------------------------------------------------------------
    /*:
     * @plugindesc (v.2.0.0) Плагин позволяет сохранять/загружать игру в/из файл(а) сохранения без открытия экрана сохранения/загрузки. Аналог автосохранения.
     * 
     * @target MZ
     * @author DarchanKaen
     *
     * @help
     *   DKR ForcedSaveLoad
     * ----------------------------------------------------------------------------
     * ---Общая информация:
     * Плагин позволяет сохранять/загружать игру в/из файл(а) сохранения без  
     * открытия экрана сохранения/загрузки. Аналог автосохранения.
     *
     * Также плагин позволяет закрыть / открыть возможность ручного сохранения в 
     * указанный слот сохранения (например, сделать слот автосохранения недоступным
     * для записи, как в MZ).
     *
     * Номер файла сохранения не должен больше нуля; по-умолчанию номер файла сохранения равняется 1.
     * 
     * Для корректной работы доступности слотов сохранения используется переменная, хранящая список
     * и по-умолчанию исп-ся переменная №7 - не затирайте ее!
     *
     * ---Команды(в эвенте команда "Скрипт"):
     * DKR.ForcedSaveLoad.onOffManualSaveSlot(isSaveFileEnabled, saveFileIndex) - вкл/выкл возможность ручного сохр-я в слот.
     * DKR.ForcedSaveLoad.forcedSave(saveFileIndex) - принудительное сохранение в указанный слот.
     * DKR.ForcedSaveLoad.forcedLoad(saveFileIndex) - принудительная загрузка из указанного слота.
     * где 
     * isSaveFileEnabled - true (можно сохранять в слот вручную) или false (слот закрыт для ручного сохранения).
     * saveFileIndex - номер слота сохранения для сохранения / загрузки (д.б. больше 0!).
     * ----------------------------------------------------------------------------
     *
     * @param saveSlotsStatusesListVarId
     * @type variable
     * @desc Номер переменной для сохранения Списка доступности слотов сохранения
     * @default 7
     *
     */
     
     
     
    (function() { 
    
    
    
    //----DATA
    DKR.ForcedSaveLoad.parameters = PluginManager.parameters('DKR_ForcedSaveLoad_2_MZ');
    let saveSlotsStatusesListVarId = Number(DKR.ForcedSaveLoad.parameters["saveSlotsStatusesListVarId"]) || 7;
    
    
    
    //----LOGIC
    const isSavefileEnabledByPlugin = function(savefileId){
    	let saveSlotsStatusesList = $gameVariables.value(saveSlotsStatusesListVarId) || [];
    	
    	let isSavefileEnabled = false;
    	
    	const saveSlotStatus = saveSlotsStatusesList[savefileId];
    	if(undefined === saveSlotStatus || null === saveSlotStatus || true === saveSlotStatus.slotEnabled){
    		isSavefileEnabled = true;
    	}else{
    		isSavefileEnabled = false;
    	}
    	
    	return isSavefileEnabled;
    }
    
    const enableOrDisableSaveSlot = function(isSaveFileEnabled, savefileId){
    	let saveSlotsStatusesList = $gameVariables.value(saveSlotsStatusesListVarId) || [];
    	
    	const saveSlotStatus = {slotId: savefileId, slotEnabled: isSaveFileEnabled};
    	saveSlotsStatusesList[savefileId] = saveSlotStatus;
    	
    	$gameVariables.setValue(saveSlotsStatusesListVarId, saveSlotsStatusesList);
    }
    
    
    const saveForeced = function(saveFileIndex = 1){
    	if(saveFileIndex < 1){
    		console.log('DKR.ForcedSaveLoad_SAVE: save file index can\'t be below one!');
    		return false
    	}
    	console.log('DKR.ForcedSaveLoad: force save in file #' + saveFileIndex + '...');
    	$gameSystem.onBeforeSave();
    	DataManager.saveGame(saveFileIndex);
    }
    
    const loadForced = function(loadFileIndex = 1){
    	if(loadFileIndex < 1){
    		console.log('DKR.ForcedSaveLoad_LOAD: save file index can\'t be below one!');
    		return false
    	}
    	if(false === DataManager.savefileExists(loadFileIndex)){
    		console.log('DKR.ForcedSaveLoad_LOAD: saveFile ' + loadFileIndex + ' not exist!');
    		return false
    	}
    	if(true === DataManager.isAnySavefileExists()){
    		console.log('DKR.ForcedSaveLoad: force load save file #' + loadFileIndex + '...');
    		if (DataManager.loadGame(loadFileIndex)) {
    			$gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
    			$gamePlayer.requestMapReload();
    			SceneManager.goto(Scene_Map);
    		}
    	}
    }
    
    
    
    //----MODIFY CORE-LIB-MZ
    //--save process
    Scene_Save.prototype.onSavefileOk = function() {
        Scene_File.prototype.onSavefileOk.call(this);
        const savefileId = this.savefileId();
    	
        if (this.isSavefileEnabled(savefileId) && true === isSavefileEnabledByPlugin(savefileId) ) {
    		
    		let saveSlotsStatusesList = $gameVariables.value(saveSlotsStatusesListVarId) || [];
    		saveSlotsStatusesList.push( {slotId: savefileId, slotEnabled: true} );
    		$gameVariables.setValue(saveSlotsStatusesListVarId, saveSlotsStatusesList);
    		
            this.executeSave(savefileId);
        } else {
            this.onSaveFailure();
        }
    	
    }
    
    //--save GUI
    Window_SavefileList.prototype.isEnabled = function(savefileId) {
        if (this._mode === "save") {
    		if( true === isSavefileEnabledByPlugin(savefileId) ){
    			return savefileId > 0;
    		}
        } else {
            return !!DataManager.savefileInfo(savefileId);
        }
    };
    
    
    
    //----COMMANDS
    DKR.ForcedSaveLoad.onOffManualSaveSlot = function(isSaveFileEnabled, saveFileIndex){	
    	enableOrDisableSaveSlot(isSaveFileEnabled, saveFileIndex);
    }
    
    DKR.ForcedSaveLoad.forcedSave = function(saveFileIndex){
    	saveForeced(saveFileIndex);
    }
    
    DKR.ForcedSaveLoad.forcedLoad = function(loadFileIndex){
    	loadForced(loadFileIndex);
    }
    
    
    	
    })();



    Ссылки на загрузку:
    MV
    АКТУАЛЬНАЯ версия 2.0:
    https://www.mediafire.com/file/63g1p...d_2_MV.js/file
    СТАРАЯ версия 1.0:
    https://www.mediafire.com/file/4uvv8...oad_MV.js/file
    MZ:
    АКТУАЛЬНАЯ версия 2.0:
    https://www.mediafire.com/file/rl9jd...d_2_MZ.js/file
    СТАРАЯ версия 1.0:
    https://www.mediafire.com/file/yicju...oad_MZ.js/file

    Спойлер Лирическое отступление:
    Сначала писал Рольфу для его плагина...потом подумал, а почему бы не сделать отдельным? =)
    Плюс слова Phileasа о плагинах...

    Да, то что в плагине можно сделать и на эвентах командой "Скрипт".
    Но тут я дописал доп. проверку на существование файла сохранения и корректность его номера (номер должен быть положительным).

    Возможно такой плагин(ы) есть, но будет еще вариант.


    Условия поставки плагина:
    Поставляется AS-IS.
    Вся ответственность при использовании - на Пользователе!
    !

    P.S:
    Спасибо Phileas за идею работы над плагинами!
    Последний раз редактировалось Darchan Kaen; 02.10.2021 в 18:21. Причина: Версия 2.0 для MZ !

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
[MV + MZ]DKR_ForcedSaveLoad